import { ValidationError } from '#src/common/errors/index.js';

import Joi from 'joi';

/**
 * 基础DTO类
 * @abstract
 * @class BaseDTO
 */
export class BaseDTO {
    /**
     * 验证数据
     * @param {Joi.Schema} schema - Joi验证模式
     * @param {Object} data - 待验证数据
     * @returns {Object} 验证后的数据
     * @throws {ValidationError} 验证失败时抛出错误
     */
    static validate(schema, data) {
        const { error, value } = schema.validate(data, {
            abortEarly: false,
            stripUnknown: true
        });

        if (error) {
            throw new ValidationError(error.details.map(err => err.message).join(', '));
        }

        return value;
    }
}